import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * user:likai
 * Date:2022-11-08
 * Time:21:00
 */
public class MyArrayList {
        public int[] elem;
        public int usedSize;//0
        //默认容量
        private static final int DEFAULT_SIZE = 10;

        public MyArrayList() {
            this.elem = new int[DEFAULT_SIZE];
        }

        /**
         * 打印顺序表:
         *   根据usedSize判断即可
         */
        public void display() {
            if(usedSize==0){
                System.out.println("没有数据");
                return;
            }
            for (int i = 0; i < usedSize; i++) {
                System.out.print(elem[i]+",");
            }
        }

        // 新增元素,默认在数组最后新增
        public void add(int data) {
            if(isFull()){
                elem= Arrays.copyOf(elem,2*elem.length);
            }
            elem[usedSize++]=data;
        }

        /**
         * 判断当前的顺序表是不是满的！
         * @return true:满   false代表空
         */
        public boolean isFull() {
            return usedSize==elem.length;
        }


        private boolean checkPosInAdd(int pos) {
            if(pos>usedSize||pos<0){
                return false;
            }
            return true;//合法
        }

        // 在 pos 位置新增元素
        public void add(int pos, int data) {
            if(!checkPosInAdd(pos)){
                System.out.println("超出位置！");
                return;
            }
            //增加元素
            if(isFull()){
                elem= Arrays.copyOf(elem,2*elem.length);
            }
            for (int i = usedSize; i >pos; i--) {
                elem[i]=elem[i-1];
            }
            elem[pos]=data;
        }

        // 判定是否包含某个元素
        public boolean contains(int toFind) {
            for (int i = 0; i < usedSize-1; i++) {
                if(elem[i]==toFind){
                    return true;
                }
            }
            return false;
        }
        // 查找某个元素对应的位置
        public int indexOf(int toFind) {
            for (int i = 0; i < elem.length; i++) {
                if(elem[i]==toFind){
                    return i;
                }
            }
            return -1;
        }

        // 获取 pos 位置的元素
        public int get(int pos) {
            //判断位置的合法性
            if(!checkPosInAdd(pos)){
                System.out.println("不存在该位置");;
                return -1;
            }
            return elem[pos];
        }

        private boolean isEmpty() {
            return usedSize==0;
        }
        // 给 pos 位置的元素设为【更新为】 value
        public void set(int pos, int value) {
            //判断位置合法性
            if(!checkPosInAdd(pos)){
                System.out.println("不存在该位置");;
                return;
            }
            elem[pos]=value;
        }

        /**
         * 删除第一次出现的关键字key
         * @param key
         */
        public void remove(int key) {
            int i = 0;
            while(elem[i]!=key){
                i++;
                if(i==usedSize){
                    System.out.println("没有这个值");
                    return;
                }
            }
            for (int j = elem.length; j >i; j--) {
                elem[j]=elem[j-1];
            }
        }

        // 获取顺序表长度
        public int size() {
            return usedSize;
        }

        // 清空顺序表
        public void clear() {
            usedSize=0;
        }

}
